
Nombre:
mIRC
Versión:
5.61
Víctima:
MIRC32.EXE
Herramientas:
W32Dasm
Hacker’s View v6.01
Cerebro
Cracker:
LW2000
Tutorial:
número 7
URL:
http://www.mirc.com
Renuncia: Este tutorial tiene una finalidad únicamente
educativa. No asumo ninguna responsabilidad por el mal uso de éste material.
1.
Lanzamos mIRC. Puede que ya se haya dado
cuenta: el programa no tiene ninguna limitación, incluso en su estado ‘UnRegistered’.
Pero yo odio el shareware ‘UnRegistered’. Así que vamos a ‘Help’, ‘Register’
e introducimos ‘LW2000’ como UserName y ‘123456’ como Serial Number.
2.
¡Boooom! Aparece una messageBox: “Sorry,
your registration name and number don’t match! Please make sure you’re typing
them in using the correct capitalization and spacing. Thanks!”. ¡Hmmmm! Vamos
a echar un vistazo en W32Dasm.
3.
Ahora, copiamos ‘MIRC32.EXE’ a ‘BACKUP.EXE’
y desensamblamos ‘MIRC32.EXE’ con W32Dasm. Hacemos click en el botón ‘String
Data References’ y buscamos “Sorry, your registration name and number don’t
match!”. Hacemos doble click en ésta cadena y cerramos la ventana SDR.
4.
Ahora deberíamos ver esto:
* Possible Reference to String Resource ID=01913:
"Sorry, your
registration name and number don't match!"
:0043B708 6879070000 push 00000779
:0043B70D E8D2EFFCFF call 0040A6E4
:0043B712 50 push eax
:0043B713 8B4508 mov eax, dword ptr [ebp+08]
:0043B716 50 push eax
5.
¡Hmmm! Este no es el código que nos gustaría
ver. Bien, subimos hasta que veamos el siguiente trozo de código ensamblador:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
:0043B621(C)
>¡Vamos aquí!
:0043B6C2 6A00 push 00000000
6.
Podemos ver que hemos saltado desde 00043B621’;
así que vamos allá a echar un vistazo. Ahora veremos esto:
* Reference To: USER32.SendDlgItemMessageA, Ord:0000h
|
:0043B60B E80A250A00 Call 004DDB1A
:0043B610 6803E14E00 push 004EE103
:0043B615 681CDD4E00 push 004EDD1C
:0043B61A E899950600 call 004A4BB8 >¡Hmmm!
Un ‘CALL’ muy
>interesante
:0043B61F 85C0 test eax, eax
>Comprueba si EAX es
>cero o uno
:0043B621 0F849B000000 je 0043B6C2 >Salta si el resultado
>es igual
7.
Bien, ¿qué quiere decir éste trozo de
código? En primer lugar tenemos un ‘CALL’ que devuelve un cero o un uno. Esto
depende del código que tenemos dentro. Ahora vamos a hacer una prueba que
nos indique si el resultado de ése ‘CALL’ es ‘1’ o ‘0’. Y al final tenemos
un ‘JE’ que nos llevará bien a la messageBox de registro CORRECTA o ERRONEA.
Sencillo, ¿no? Un simple comprobación Name/Code … Bien, ¡vamos a probarlo!
Ponemos la barra en ‘:0043B621 OF849B000000 JE 0043B6C2’; nos encontramos
en el offset ‘3AC21’ (lo podemos ver en la barra de estado).
8.
Copiamos ‘MIRC32.EXE’ a ‘TRY.EXE’. Abrimos
‘TRY.EXE’ con HIEW. Pulsamos Intro dos veces y vamos al modo DeCode. Pulsamos
F5 e introducimos ‘3AC21’. Bien, ahora pulsamos F3 para editar el fichero.
Cambiamos el ‘0F84’ a ‘0F85’, lo cual cambia el ‘JE’ a ‘JNE’. Pulsamos F9
para actualizar el fichero y F10 para salir.
9.
Ahora arrancamos ‘TRY.EXE’. Introducimos
cualquier Name y cualquier Serial. ¡Boooom! “Your registration has been entered
successfully. Thanks for registering!”. ¡Hey, estupendo! ¡Lo hemos hecho!
10.
¡Hmmm! Salimos del programa y arrancamos nuevamente ‘TRY.EXE’. ¡Boooom!
¡¡¡MIERDA!!! “Unlicensed copy!” Así que éste programa realiza una comprobación
al arrancar. Por lo tanto, abrimos ‘MIRC32.EXE’ en W32Dasm nuevamente. Y volvemos
a:
* Reference To: USER32.SendDlgItemMessageA, Ord:0000h
|
:0043B60B E80A250A00 Call 004DDB1A
:0043B610 6803E14E00 push 004EE103
:0043B615 681CDD4E00 push 004EDD1C
:0043B61A E899950600 call 004A4BB8
>¡Hmmm! Vamos aquí.
:0043B61F 85C0 test eax, eax
:0043B621 0F849B000000 je 0043B6C2
11.
¿Qué tenemos aquí además del ¡CALL¡? ¡Nada! Así que vamos a echar
un vistazo … Ponemos la barra en la línea del ‘CALL’ y hacemos click en el
botón ‘Call’. Ahora deberíamos ver esto:
:004A4BB8 55 push ebp
:004A4BB9 8BEC mov ebp, esp
:004A4BBB 53 push ebx
:004A4BBC 56 push esi
:004A4BBD 57 push edi
:004A4BBE 8B750C mov esi, dword ptr [ebp+0C]
:004A4BC1 8B5D08 mov ebx, dword ptr [ebp+08]
:004A4BC4 53 push ebx
:004A4BC5 E87AC20200 call 004D0E44
:004A4BCA 59 pop ecx
:004A4BCB 83F805 cmp eax, 00000005
>Compara EAX con 5
:004A4BCE 7307 jnb 004A4B >Salta si no es
>superior
<<-- jump if not below
:004A4BD0 33C0 xor eax, eax >Pone EAX a cero
:004A4BD2 E9DA000000 jmp 004A4CB1 >Salta a 004A4CB1
12.
Por lo tanto, seguimos traceando hasta que veamos:
:004A4C23 6864205000 push 00502064
:004A4C28 68641F5000 push 00501F64
:004A4C2D E8A6FEFFFF call 004A4AD8 >Bien: hemos visto
:004A4C32 85C0 test eax, eax >algo como esto
:004A4C34 7407 je 004A4C3D >antes
:004A4C36 B801000000 mov eax, 00000001
:004A4C3B EB74 jmp 004A4CB1
13.
¡Eh! Creo que piensa lo mismo que yo. Vamos a cambiar el ‘JE’ a ‘JNE’.
Ponemos la barra en ‘:004ª4C34 7707 JE 004A4C3D’ y vemos que el offset es
‘A4234’.
14.
Abrimos ‘MIRC32.EXE’ en HIEW. Seguimos el mismo procedimiento de
siempre … Dos veces ‘Intro’; F5 e introducimos ‘A4234’; F3 para editar y cambiar
el ‘7407’ a ‘7507’. F9 para actualizar el fichero y F10 para salir.
15.
Lanzamos ‘MIRC32.EXE’. Hacemos click en ‘Help’, ‘Register’ e introducimos
‘LW2000’ como Name y ‘123456’ como Serial. Pulsamos el botón ‘Ok’.
¡Enhorabuena! Ya es un usuario registrado.
¡Se acabó! Fácil, ¿no? ¿Algún comentario? Envíeme
un email a LW2000@gmx.net.
o vaya a http://www.LW2000.cjb.net
Gracias a tKC por sus tutoriales. Empecé leyendo su
primer tutorial y todavía sigo leyéndolos.
Traducción de: MeGaBiTe